const axios = require('axios');
const fs = require('fs');
const path = require('path');

// 豆瓣电影 Top250 的 URL
const url = 'https://movie.douban.com/top250';

// 创建保存文件的目录
const saveDir = './douban_responses';
if (!fs.existsSync(saveDir)) {
    fs.mkdirSync(saveDir);
}

// 没有浏览器头的请求
async function requestWithoutHeaders() {
    console.log('🔴 发送没有浏览器头的请求...\n');

    try {
        const response = await axios.get(url);

        // 保存响应
        const filename = path.join(saveDir, 'douban_no_headers.html');
        fs.writeFileSync(filename, response.data);

        console.log(`✅ 状态码: ${response.status}`);
        console.log(`📝 内容类型: ${response.headers['content-type']}`);
        console.log(`💾 响应已保存到: ${filename}`);
        console.log(`📏 文件大小: ${(Buffer.byteLength(response.data) / 1024).toFixed(2)} KB`);

    } catch (error) {
        console.error('❌ 请求失败!');
        console.error(`错误状态码: ${error.response?.status || '无'}`);
        console.error(`错误信息: ${error.message}`);

        // 如果有错误响应，也保存下来
        if (error.response && error.response.data) {
            const filename = path.join(saveDir, 'douban_no_headers_error.html');
            fs.writeFileSync(filename, error.response.data);
            console.error(`💾 错误响应已保存到: ${filename}`);
        }
    }
}

// 带浏览器头的请求
async function requestWithHeaders() {
    console.log('\n\n🟢 发送带浏览器头的请求...\n');

    try {
        const response = await axios.get(url, {
            headers: {
                // 模拟 Chrome 浏览器的请求头
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
                'Accept-Encoding': 'gzip, deflate, br',
                'Connection': 'keep-alive',
                'Cache-Control': 'max-age=0'
            }
        });

        // 保存响应
        const filename = path.join(saveDir, 'douban_with_headers.html');
        fs.writeFileSync(filename, response.data);

        console.log(`✅ 状态码: ${response.status}`);
        console.log(`📝 内容类型: ${response.headers['content-type']}`);
        console.log(`💾 响应已保存到: ${filename}`);
        console.log(`📏 文件大小: ${(Buffer.byteLength(response.data) / 1024).toFixed(2)} KB`);

    } catch (error) {
        console.error('❌ 请求失败!');
        console.error(`错误状态码: ${error.response?.status || '无'}`);
        console.error(`错误信息: ${error.message}`);

        // 如果有错误响应，也保存下来
        if (error.response && error.response.data) {
            const filename = path.join(saveDir, 'douban_with_headers_error.html');
            fs.writeFileSync(filename, error.response.data);
            console.error(`💾 错误响应已保存到: ${filename}`);
        }
    }
}

// 执行测试
async function runComparison() {
    console.log(`📁 响应文件将保存在: ${path.resolve(saveDir)}\n`);

    // 先测试没有头的请求
    await requestWithoutHeaders();

    // 等待 2 秒，避免请求过快
    console.log('\n⏳ 等待 2 秒...');
    await new Promise(resolve => setTimeout(resolve, 2000));

    // 再测试有头的请求
    await requestWithHeaders();

    console.log('\n✅ 完成! 请查看 douban_responses 文件夹中的 HTML 文件。');
}

// 运行比较测试
runComparison();